import java.util.concurrent.CountDownLatch;

public class CountDownLatchExample {
    public static void main(String[] args) {
        // 设置倒计时为 2，表示要等 2 个线程（A 和 B）完成
        CountDownLatch latch = new CountDownLatch(2);

        // 线程 A
        Thread a = new Thread(() -> {
            System.out.println("线程 A 开始执行");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("线程 A 执行完毕");
            latch.countDown(); // A 完成，计数 -1
        });

        // 线程 B
        Thread b = new Thread(() -> {
            System.out.println("线程 B 开始执行");
            try {
                Thread.sleep(1500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("线程 B 执行完毕");
            latch.countDown(); // B 完成，计数 -1
        });

        // 线程 C
        Thread c = new Thread(() -> {
            try {
                System.out.println("线程 C 准备执行，等待 A 和 B 完成...");
                latch.await(); // 阻塞，直到 A 和 B 都调用 countDown()，计数归零
                System.out.println("线程 C 开始执行（A 和 B 都已完成）");
                Thread.sleep(500);
                System.out.println("线程 C 执行完毕");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        // 启动 A、B、C
        a.start();
        b.start();
        c.start(); // C 会等待 A 和 B 完成才执行
    }
}
